package com.zkyc.framework.website.service;

import com.zkyc.framework.common.pojo.Column;
import com.zkyc.framework.common.pojo.ColumnData;
import com.zkyc.framework.common.vo.ResultVO;
import com.zkyc.framework.common.vo.website.ColumnDataPageVo;
import com.zkyc.framework.common.vo.website.ColumnDataRefVo;
import com.zkyc.framework.common.vo.website.ColumnSaveVo;
import com.zkyc.framework.common.vo.website.ModuleColumnGeneratorVo;

import java.util.List;

/**
 * (Column)表服务接口
 *
 * @author libingchuan
 * @since 2022-05-25 15:04:33
 */
public interface ColumnService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Column queryById(Integer id);


    /**
     * 通过ID查询单条数据
     *
     * @param moudleId 主键
     * @return 实例对象
     */
    List<Column> queryByMoudleId(Integer moudleId);

    /**
     * 查询
     *
     * @return 查询结果
     */
    ResultVO queryList(Integer columnType);

    /**
     * 新增数据
     *
     * @param column 实例对象
     * @return 实例对象
     */
    ResultVO insert(Column column);

    /**
     * 修改数据
     *
     * @param column 实例对象
     * @return 实例对象
     */
    ResultVO update(Column column);


    /**
     * 修改数据
     *
     * @param column 实例对象
     * @return 实例对象
     */
    ResultVO updateName(Column column);

    /**
     * 通过主键隐藏数据
     *
     * @param id 主键
     * @return 是否成功
     */
    ResultVO hideById(Integer id);

    /**
     * 组件下拉框
     *
     * @return 组件列表
     */
    ResultVO<?> getComponents();

    /**
     * 新增数据
     *
     * @param columnSaveVo 实体
     * @return 新增结果
     */
    ResultVO<?> add(ColumnSaveVo columnSaveVo);

    /**
     * 通过moudleId查询对应栏目
     *
     * @param moudleId 路由id
     * @return 栏目数据
     */
    ResultVO<?> queryColumnByMoudleId(Integer moudleId);

    /**
     * 添加栏目数据
     *
     * @param columnData 栏目数据
     * @return 新增结果
     */
    ResultVO addData(ColumnData columnData);

    /**
     * 查询栏目数据
     *
     * @param columnDataPageVo 查询条件
     * @return 查询结果
     */
    ResultVO neoQuery(ColumnDataPageVo columnDataPageVo);

    // ResultVO queryColumnById(Integer id);

    /**
     * 编辑栏目
     *
     * @param columnSaveVo 实体
     * @return 编辑结果
     */
    ResultVO updateColumn(ColumnSaveVo columnSaveVo);

    /**
     * 编辑数据
     *
     * @param columnData 实体
     * @return 编辑结果
     */
    ResultVO upOrDown(ColumnData columnData);

    /**
     * 隐藏栏目数据
     *
     * @param id 主键
     * @return 删除是否成功
     */
    ResultVO hideDataById(Integer id);

    ResultVO queryDataById(Integer id);

    /**
     * 编辑数据
     *
     * @param columnData 实体
     * @return 编辑结果
     */
    ResultVO updateData(ColumnData columnData);

    /**
     * 通过moudleId查询对应栏目的数据
     *
     * @param moudleId 路由id
     * @return 栏目数据
     */
    ResultVO<?> queryDataByMoudleId(Integer moudleId);

    /**
     * 通过moudleId查询对应栏目的数据
     *
     * @param columnId 路由id
     * @return 栏目数据
     */
    ResultVO<?> queryDataByColumnId(Integer columnId);

    /**
     * 查询首页栏目
     *
     * @param moudleId 路由id
     * @return 栏目数据
     */
    ResultVO<?> queryBannerByMoudleId(Integer moudleId);

    /**
     * 推荐栏目数据
     *
     * @param columnDataRefVo 栏目数据
     * @return 新增结果
     */
    ResultVO refData(ColumnDataRefVo columnDataRefVo);

    /**
     * 移除推荐
     *
     * @param columnData 栏目数据
     * @return 新增结果
     */
    ResultVO removeRef(ColumnData columnData);

    /**
     * 置顶首页栏目数据
     *
     * @param columnDataPageVo 栏目数据
     * @return 新增结果
     */
    ResultVO top(ColumnDataPageVo columnDataPageVo);

    /**
     * 通过columnId查询对应栏目的数据
     *
     * @param columnDataPageVo 路由id
     * @return 栏目数据
     */
    ResultVO<?> queryDataByColumnIdPage(ColumnDataPageVo columnDataPageVo);

    /**
     * 搜索
     * 匹配不到内容会将搜索内容分词后根据分词结果搜索
     *
     *
     * @param websiteId 网站id
     * @param content 搜索内容
     * @return 查询结果
     */
    ResultVO search(String websiteId, String content, Integer current, Integer size, Integer timeRange, Integer searchRange);

    /**
     * 生成网站时生成模块和栏目
     *
     * @param generatorVo 模板与网站信息
     */
    ResultVO generate(ModuleColumnGeneratorVo generatorVo);

    /**
     * 删除生成模块和栏目
     *
     * @param generatorVo 网站信息
     */
    ResultVO delWeb(ModuleColumnGeneratorVo generatorVo);

    /**
     * 稿件分页
     */
    ResultVO previousNext(Integer id);

    ResultVO temp(ModuleColumnGeneratorVo generatorVo);

    ResultVO reserveTemp(ModuleColumnGeneratorVo generatorVo);
}
